# -*- coding: utf-8 -*-

from impressao.models import *
from configuracao.models import Dados

import os
import commands

CORTE = {
    'PARCIAL': chr(27) + chr(109),
    'TOTAL'  : chr(27) + chr(119)
}

# para remover acentos
import string
from unicodedata import normalize

def negrito(texto):
    return texto
#    return chr(0x1b) + chr(0x45) + texto + chr(0x1b) + chr(0x46)

def italico(texto):
    return texto
#    return chr(0x1b) + chr(0x34) + texto + chr(0x1b) + chr(0x35)

def remover_acentos(txt, codif='utf-8'):

    '''
    Devolve cópia de uma str substituindo os caracteres 
    acentuados pelos seus equivalentes não acentuados.
    
    ATENÇÃO: carateres gráficos não ASCII e não alfa-numéricos,
    tais como bullets, travessões, aspas assimétricas, etc. 
    são simplesmente removidos!
    
    >>> remover_acentos('[ACENTUAÇÃO] ç: áàãâä! éèêë? íì&#297;îï, óòõôö; úù&#361;ûü.')
    '[ACENTUACAO] c: aaaaa! eeee? iiiii, ooooo; uuuuu.'
    
    '''
    try:
        return normalize('NFKD', txt.decode(codif)).encode('ASCII','ignore')
    except:
        return normalize('NFKD', txt).encode('ASCII','ignore')

# FIM DE FUNÇÕES

def linha(comprimento):
    return '-' * comprimento

def cabecalho(colunas):
    dados = Dados.objects.all()[0]
    
    saida = negrito(dados.nome.center(colunas)) + '\n' # Testando negrito
    if dados.nome_complemento and dados.nome_complemento != '':
        saida += negrito(dados.nome_complemento.center(colunas)) + '\n' # Testando negrito
    
    saida += dados.endereco.center(colunas) + '\n'
    if dados.endereco_complemento and dados.endereco_complemento != '':
        saida += dados.endereco_complemento.center(colunas) + '\n'
    
    if dados.telefone1 and dados.telefone1 != '':
        saida += dados.telefone1.center(colunas) + '\n'
    
    if dados.telefone2 and dados.telefone2 != '':
        saida += dados.telefone2.center(colunas) + '\n'
    
    if dados.telefone3 and dados.telefone3 != '':
        saida += dados.telefone3.center(colunas) + '\n'

    return saida

def rodape(colunas):
    dados = Dados.objects.all()[0]
    
    saida = ''
    
    if dados.slogan and dados.slogan != '':
        saida = italico(dados.slogan.center(colunas)) + '\n' # testando italico
    
    if dados.frase and dados.frase != '':
        saida += italico(dados.frase.center(colunas)) + '\n' # testando italico
    
    if dados.aviso and dados.aviso != '':
        saida += '-' * colunas + '\n'
        saida += dados.aviso.center(colunas) + '\n'
        saida += '-' * colunas + '\n'
    
    return saida

def imprime_caixa(conteudo, impressora, c = None, r = None, corteTotal = False):
    if c == None:
        c = cabecalho(impressora.colunas)
    
    if r == None:
        r = rodape(impressora.colunas)
    
    conteudo = remover_acentos(conteudo)
    c = remover_acentos(c).center(impressora.colunas)
    r = remover_acentos(r).center(impressora.colunas)
    
    if not c.endswith('\n'):
        c += '\n'
    
    if not conteudo.endswith('\n'):
        conteudo += '\n'
    
    if not r.endswith('\n'):
        r += '\n'
    
    saida = (
         c + linha(impressora.colunas) + '\n' + 
         conteudo + linha(impressora.colunas) + '\n' +
         r + '\n\n\n\n'
    )
    
    if impressora != None:
        if impressora.corte == 1:
            if corteTotal:
                saida += CORTE['TOTAL']
            else:
                saida += CORTE['PARCIAL']
        
        comando = 'echo "' + saida + '" | lpr -P ' + impressora.referencia
        os.system(comando)
